package jsd2302.src.io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/***
 * 通过提高每次读写的数据量减少实际读写的次数，可以提供读写的效率
 * */
public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("gl.jpg");
        FileOutputStream fos=new FileOutputStream("gl_cp2.jpg");

        /*
        InputStream超类中定义了块读取数据的方法：
        int read(byte[] data)
        一次性读取给定的字节数组data总长度的字节量，并存入到字节数组中
        但绘制表示实际读取到了多少字节，若返回-1表示读到了末尾
         */
       /*
        long start=System.currentTimeMillis();
        byte[] data=new byte[1024*10];//10kb
        int len;//记录每次实际读取的字节数
        while((len=fis.read(data))!=-1){
            //将字节数组byte从下标为0开始，读取多少，写多少
            fos.write(data,0,len);
        }
        long end=System.currentTimeMillis();
        System.out.println("复制完毕1"+(end-start)+"ms");
        fis.close();
        fos.close();

        */
        long start= System.currentTimeMillis();
        byte[] data=new byte[1024*10];
        int len;
        while((len=fis.read(data))!=-1){
            fos.write(data,0,len);
        }
        long end=System.currentTimeMillis();
        System.out.println("复制完毕"+(end-start)+"ms");
        fos.close();
        fis.close();


        /*
        long start=System.currentTimeMillis();
        byte[] data=new byte[1024*10];//100kb
        while(fis.read(data)!=-1){
            fos.write(data);
        }
        long end=System.currentTimeMillis();
        System.out.println("复制完毕1"+(end-start)+"ms");
        fis.close();
        fos.close();

         */
    }
}
